package io;

import java.io.*;
import java.util.Scanner;

/**
 * date: 2023-2-22
 * 进行普通文件的复制
 */
public class test2 {
    public static void main(String[] args) throws IOException {
        Scanner scanner = new Scanner(System.in);

       // 输入两个路径：源 和 目标（从哪里，拷贝到哪里）
        // 源文件
        System.out.println("请输入要复制的文件（绝对路径OR相对路径）：");
        String sourcePath = scanner.next();
        File sourceFile = new File(sourcePath);
        if(!sourceFile.exists()) {
            System.out.println("文件不存在，请确认路径是否正确");
            return;
        }
        if(!sourceFile.isFile()) {
            // 如果源不是一个文件（是个目录或者不存在），此时就不做任何操作
            System.out.println("文件不是普通文件，请确认源路径是否正确");
            return;
        }
        // 目标文件
        System.out.println("请输入要拷贝到哪里？目标路径（绝对路径OR相对路径）：");
        String destPath = scanner.next();
        File destFile = new File(destPath);
        if(destFile.exists()) {
            if(destFile.isDirectory()) {
                System.out.println("目标路径已经存在，并且是一个目录，请确认路径是否正\n" + "确");
                return;
            }
            if(destFile.isFile()) {
                System.out.println("目录路径已经存在，是否要进行覆盖？y/n");
                String ans = scanner.next();
                if(!ans.toLowerCase().equals("停止复制"));
                return;
            }
        }

        // 进行拷贝工作
        // try 语法支持包含多个流对象，多个流对象之间使用 ; 分隔开就行了   。 也可以写多个 try（）
        try(InputStream is = new FileInputStream(sourceFile);
            OutputStream os = new FileOutputStream(destFile)) {
                byte[] buf = new byte[1024];
                int len;
                // 进行读文件操作
                while (true) {
                    len = is.read(buf);
                    if(len == -1) {
                        break;
                    }

                    os.write(buf,0,len);
                }

                os.flush();

        }
        System.out.println("复制已完成");
    }

}
